package com.dudy;

import java.util.Observable;

/**
 * @author <a href="mailto:zjw2023@163.com">zjw2023</a>
 * @version 1.0
 * @Description 被观察者
 * @Since 2016/5/23
 */
public class SubjectObservable extends Observable {
    private String name;
    private String type;
    private String colour;
    private double price;

    /**
     * 通过该方法设置变更内容
     * setChange()方法用来标记是否进行变更，一般情况只需要调用，但如果遇到有条件的变更时，比如当值大于某个值时才变更，可以先判断条件，然后再setChange
     * notifyObservers() 当变更发生时，通过setInfo将所有的变更初始化好，并通知观察者进行变更，但观察者需要变更什么内容，则由观察者自己定义
     * notifyObservers(Object args) 该方法notifyObservers()，区别在于由可观察者SubjectObservable推送变更内容，观察者被动接受，类似于广播
     * @param name 要变更的数据
     * @param type 要变更的数据
     * @param colour 要变更的数据
     * @param price 要变更的数据
     */
    public void setInfo(String name,String type,String colour,double price){
        this.name = name;
        this.type = type;
        this.colour = colour;
        this.price = price;
        setChanged();
        notifyObservers();
//        notifyObservers(name);
    }

    /**
     * 省略get\set方法
     */

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getColour() {
        return colour;
    }

    public void setColour(String colour) {
        this.colour = colour;
    }

    public double getPrice() {
        return price;
    }

    /**
     * 当price变更时，会通知观察者进行变更（观察者属于被动接受消息）注释部分是这样的
     * @param price
     */
    public void setPrice(double price) {
        this.price = price;
//        this.setChanged();
//        this.notifyObservers(price);
    }
}
